From fd9aec27fce9629e889df57aaf04436b2739142b Mon Sep 17 00:00:00 2001 From: Debarshi Ray Date: Mon, 28 Aug 2017 18:58:50 +0200 Subject: [PATCH] GtkBuilder: Prefer "type-func" over "class" when looking for the GType https://bugzilla.gnome.org/show_bug.cgi?id=786932 --- gtk/gtkbuilderparser.c | 26 +++++++++++++------------- testsuite/gtk/builder.c | 12 +++++++++++- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/gtk/gtkbuilderparser.c b/gtk/gtkbuilderparser.c index 5dd6ed72bc..da890b42e5 100644 --- a/gtk/gtkbuilderparser.c +++ b/gtk/gtkbuilderparser.c @@ -279,34 +279,34 @@ parse_object (GMarkupParseContext *context, return; } - if (object_class) + if (type_func) { - object_type = gtk_builder_get_type_from_name (data->builder, object_class); + /* Call the GType function, and return the GType, it's guaranteed afterwards + * that g_type_from_name on the name will return our GType + */ + object_type = _get_type_by_symbol (type_func); if (object_type == G_TYPE_INVALID) { g_set_error (error, GTK_BUILDER_ERROR, - GTK_BUILDER_ERROR_INVALID_VALUE, - "Invalid object type '%s'", object_class); + GTK_BUILDER_ERROR_INVALID_TYPE_FUNCTION, + "Invalid type function '%s'", type_func); _gtk_builder_prefix_error (data->builder, context, error); return; - } + } } - else if (type_func) + else if (object_class) { - /* Call the GType function, and return the GType, it's guaranteed afterwards - * that g_type_from_name on the name will return our GType - */ - object_type = _get_type_by_symbol (type_func); + object_type = gtk_builder_get_type_from_name (data->builder, object_class); if (object_type == G_TYPE_INVALID) { g_set_error (error, GTK_BUILDER_ERROR, - GTK_BUILDER_ERROR_INVALID_TYPE_FUNCTION, - "Invalid type function '%s'", type_func); + GTK_BUILDER_ERROR_INVALID_VALUE, + "Invalid object type '%s'", object_class); _gtk_builder_prefix_error (data->builder, context, error); return; - } + } } else { diff --git a/testsuite/gtk/builder.c b/testsuite/gtk/builder.c index daec5666c5..cd48b370a0 100644 --- a/testsuite/gtk/builder.c +++ b/testsuite/gtk/builder.c @@ -667,6 +667,10 @@ test_types (void) " " ""; const gchar buffer3[] = + "" + " " + ""; + const gchar buffer4[] = "" " " ""; @@ -684,10 +688,16 @@ test_types (void) g_assert (GTK_IS_WINDOW (window)); gtk_widget_destroy (GTK_WIDGET (window)); g_object_unref (builder); + + builder = builder_new_from_string (buffer3, -1, NULL); + window = gtk_builder_get_object (builder, "window"); + g_assert (GTK_IS_WINDOW (window)); + gtk_widget_destroy (GTK_WIDGET (window)); + g_object_unref (builder); error = NULL; builder = gtk_builder_new (); - gtk_builder_add_from_string (builder, buffer3, -1, &error); + gtk_builder_add_from_string (builder, buffer4, -1, &error); g_assert_error (error, GTK_BUILDER_ERROR, GTK_BUILDER_ERROR_INVALID_TYPE_FUNCTION); g_error_free (error); g_object_unref (builder); -- 2.30.2